package Forum;

import Forum.InitAndEnd;
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.openqa.selenium.*;
import org.openqa.selenium.support.ui.Select;


import java.util.concurrent.TimeUnit;


import static java.lang.Thread.sleep;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class ForumCases extends InitAndEnd {

    /**
     * 注册页面测试
     * 1. 在登录页面点击注册
     * 2. 跳转到注册页面进行注册
     */
    @Order(1)
    @Test
    void Reg() throws InterruptedException {
        // 打开登录页面
        webDriver.get("http://47.109.70.249:8080/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 点击注册
        webDriver.findElement(By.xpath("/html/body/div[1]/div/div/div[1]/div/div[3]/a")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 输入用户名
        webDriver.findElement(By.cssSelector("#username")).sendKeys("王2222");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 输入昵称
        webDriver.findElement(By.cssSelector("#nickname")).sendKeys("laowu");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 输入密码
        webDriver.findElement(By.cssSelector("#password")).sendKeys("123");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 确认密码
        webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 点击同意协议
        webDriver.findElement(By.cssSelector("#policy")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 点击注册按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
    }

    /**
     * 登录页面测试
     * 输入正确账号、密码登陆成功
     */
    @Order(2)
    @ParameterizedTest
    @CsvFileSource (resources = "LoginSuccess.csv")
    void LoginSuccess(String username,String password,String index_url) throws InterruptedException {

        // 1. 登录操作
        // 打开登录页
        webDriver.get("http://47.109.70.249:8080/sign-in.html");
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 输入账号（默认张三）
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 输入密码（默认123）
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 点击提交按钮
        webDriver.findElement(By.cssSelector("#submit")).click();
        sleep(1000);
        // 2. 跳转页面到主页
        // 获取到当前页面的 url
        String cur_url = webDriver.getCurrentUrl();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 断言
        Assertions.assertEquals(index_url,cur_url);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
/*        // 获取用户名
        String cur_nick_name = webDriver.findElement(By.cssSelector("#index_nav_nickname")).getText();
        sleep(1000);
        // 判断用户名是否一致
        Assertions.assertEquals("laosan",cur_nick_name);*/
    }

    /**
     * 主页
     * 校验文章数量不为0
     */
 /*   @Test
    void Index(){
        // 打开主页
        webDriver.get("");
        // 获取列表页对应的元素
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);// 智能等待
        int title_num = webDriver.findElements(By.cssSelector("")).size();
        // 断言
        Assertions.assertEquals(0,title_num);
    }*/


    /**
     * 个人帖子
     * 1.点击个人信息栏
     //     * 2.校验文章标题是否与导航栏一致
     */
    @Order(3)
    @Test
    void indexUserProfile() throws InterruptedException {
        // 点击个人信息栏
        webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 点击查看我的帖子按钮
        webDriver.findElement(By.cssSelector("#index_user_profile")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 获取页面导航栏的文章标题
        String cur_title = webDriver.findElement(By.xpath("//*[@id=\"topBoardList\"]/li[2]/a/span[2]")).getText();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 获取我的帖子中的文章标题
        String my_title = webDriver.findElement(By.cssSelector(".profile_article_list_a_title")).getText();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 断言
        /*Assertions.assertEquals(cur_title,my_title);*/

    }

    /**
     * 发布帖子
     * 1. 点击导航栏首页按钮回到首页
     * 2. 点击发布帖子按钮
     * 3. 选择对应的模块
     * @throws InterruptedException
     */
    @Order(4)
    @Test
    void EditArticle() throws InterruptedException {
        // 点击首页导航栏回到首页
        webDriver.findElement(By.cssSelector(".nav-link-title")).click();
        sleep(1000);
        // 找到发布帖子的按钮并点击
        webDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[1]/div/div/div[2]/div/a[1]")).click();
        sleep(1000);
        // 选择模块
        WebElement webElement = webDriver.findElement(By.cssSelector(".form-select"));
        Select select = new Select(webElement);
        select.selectByIndex(1);// 默认按照第二个模块选择
        select.selectByValue("2");
        sleep(1000);
        // 通过 JS 将标题进行输入
        ((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"article_post_title\").value=\"测试标题输入\"");
        sleep(1000);
        // Tab切换到内容框
        WebElement webElement2 = webDriver.findElement(By.cssSelector("#article_post_title"));
        webElement2.sendKeys(Keys.TAB);
        sleep(1000);
       /* // 输入内容
        webDriver.findElement(By.cssSelector("#edit-article > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span")).sendKeys("333");
        sleep(1000);*/
        /*// 点击发布
        webDriver.findElement(By.cssSelector("#article_post_submit > svg")).click();
        sleep(1000);*/
    }
    /**
     * 校验已发布文章标题
     * 校验已发布文章时间
     */
    @Order(5)
    @Test
    void BlogInfoChecked() {
        webDriver.get("http://47.109.70.249:8080/index.html");

    }



    /**
     * 删除帖子
     */
    @Order(6)
    @Test
    void DeleteArticle() throws InterruptedException {
        // 回到首页
        webDriver.get("http://47.109.70.249:8080/index.html");
        sleep(1000);
        // 首页中点击文章
        webDriver.findElement(By.cssSelector(".article_list_a_title")).click();
        sleep(1000);
        // 点击删除按钮
        webDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div[1]/div[2]/div[2]/div/div[3]/div/a")).click();
        sleep(1000);
        // 点击确定删除
        webDriver.findElement(By.xpath("//*[@id=\"details_artile_delete\"]")).click();
        sleep(1000);
        // 列表页第一条内容不是原来的了
    }

    /**
     * 退出
     */
    @Order(7)
    @Test
    void Logout() throws InterruptedException {
        webDriver.get("http://47.109.70.249:8080/index.html");
        // 点击个人信息栏
        webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 点击退出
        webDriver.findElement(By.cssSelector("#index_user_logout")).click();
        sleep(1000);
        // 校验网址是否为登录页面
        String url = webDriver.getCurrentUrl();
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        Assertions.assertEquals("http://47.109.70.249:8080/sign-in.html",url);
        webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        // 校验是否存在登录按钮
        WebElement webElement = webDriver.findElement(By.cssSelector("#submit"));
        Assertions.assertNotNull(webElement);
    }
}
